#include "SqliteDb.h"
#include <QDebug>
#include <QSqlQuery>

SqliteDb *SqliteDb::m_SqliteDb = NULL;

SqliteDb::SqliteDb(QObject *parent) :
    QObject(parent)
{
    m_DB = QSqlDatabase::addDatabase("QSQLITE");
}

SqliteDb::~SqliteDb()
{
    m_DB.close();
}

SqliteDb *SqliteDb::getInstance()
{
    if(m_SqliteDb == NULL)
    {
        m_SqliteDb = new SqliteDb();
    }

    return m_SqliteDb;
}


void SqliteDb::setDbName(const QString &dbName)
{
    m_dbName = dbName;
}

QSqlDatabase SqliteDb::getDB()
{
    return m_DB;
}

bool SqliteDb::openDatabase()
{
   m_DB.setDatabaseName(m_dbName);

   bool isOpen = false;
   isOpen = m_DB.open();
   if(isOpen)
   {
       qDebug()<<"OpenDatabase successfully!";
       qDebug()<<"database is:"<<m_DB.databaseName();
   }
   else
   {
       qDebug()<<"Open Database fail";
   }
   return isOpen;
}

bool SqliteDb::insertTbData(const QString& table, QStringList& names, QStringList& values)
{
    if(names.size() != values.size())
    {
      return false;
    }

    openDatabase();  //打开数据库;
    QSqlQuery query(m_DB);//QSqlDatabase::database()

    QString sql = QString("insert into %1 (").arg(table);
    int i;
    for (i=0; i < names.size(); i++)
    {
       sql = sql + names.value(i);
       if (i != names.size() - 1)
       {
          sql += QString(",");
       }
       else
       {
          sql += QString(") ");
       }
   }
   sql +=  QString("values (");

   for (i = 0; i < values.size(); i++)
   {
     sql +=  QString("'%1'").arg(values.value(i));
     if (i != values.size()-1)
     {
      sql += QString(",");
     }
   }
   sql += QString(")");

   qDebug()<<sql;

    bool ok = query.exec(sql);
    qDebug()<<"insert data"<<ok;
    m_DB.close();
    if(ok)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool SqliteDb::updateTbData(const QString& table, QStringList& names, QStringList& values, QString& expression)
{
    if(names.size() != values.size())
    {
      return false;
    }

    QSqlQuery query(QSqlDatabase::database());
    QString sql = QString("update ")+table+QString(" set ");

    for (int i = 0; i < names.size(); i++)
    {
        sql +=  names.value(i);
        sql +=  QString(" = '");
        sql +=  values.value(i);
        sql +=  QString("'");
        if (i != names.size()-1)
        {
            sql += QString(" ,");
        }
    }
    sql +=  QString(" where %1").arg(expression);
    if(query.exec(sql))
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool SqliteDb::deleteTbData(const QString& table, QString& expression)
{

    QSqlQuery query(QSqlDatabase::database());
    QString sql = QString("delete from %1 ").arg(table) + QString(" where %1").arg(expression);
    if (query.exec(sql))
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool SqliteDb::getTbValues(const QString& table, QStringList& values)
{

    QSqlQuery query(QSqlDatabase::database());
    openDatabase();  //打开数据库;
    QString sql = QString("select * from %1 ;").arg(table);
    qDebug()<<sql;
    bool ok = query.exec(sql);
    qDebug()<<ok;
    while (query.next())
    {
        //values<< query.value(1);
        //values<< query.value(1);
    }
    qDebug()<<values;
    m_DB.close();
}
